package com.czr.controller.upload;

import com.czr.service.upload.TestOssUploadService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * Description:
 * Author: czr czr
 * Version: 1.0
 * Create Date Time: 2021/12/7 16:26.
 * Update Date Time:
 *
 * @see
 */
@Controller
@Slf4j
public class UploadController {

    @Autowired
    private TestOssUploadService ossUploadService;

    @GetMapping("/upload")
    public String upload() {
        return "upload";
    }

    @PostMapping("/ossupload")
    @ResponseBody
    public String ossupload(@RequestParam("file") MultipartFile multipartFile) {
        return ossUploadService.fileUpload(multipartFile);
    }

    @PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file) {
        try {
            String realfilename = file.getOriginalFilename();
            // 2:截图文件名的后缀
            String imgSuffix = realfilename.substring(realfilename.lastIndexOf("."));
            // 3:生成的唯一的文件名：能不能用中文名：不能因为统一用英文命名。
            String newFileName = UUID.randomUUID().toString()+imgSuffix;
            // 4：日期目录
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
            String datePath = dateFormat.format(new Date());// 日期目录：2021/10/27
            // 5: 指定文件上传以后的目录
            File targetPath = new File("./FILE/KING/" + datePath);
            if(!targetPath.exists())targetPath.mkdirs();
            // 6: 指定文件上传以后的服务器的完整的文件名
            File targetFileName = new File(targetPath,newFileName);
            // 7: 文件上传到指定的目录
            FileUtils.copyInputStreamToFile(file.getInputStream(), targetFileName);
            //file.transferTo(targetFileName);
            return "ok";
        } catch (IOException e) {
            e.printStackTrace();
            return "fail";
        }
    }

    //@PostMapping(value = "/upload")
    public String upload1(@RequestParam("file") MultipartFile file) {    //注意参数
        try {
            if (file.isEmpty()) {
                return "文件为空";
            }
            // 获取文件名
            String fileName = file.getOriginalFilename();
            log.info("上传的文件名为：" + fileName);//写日志
            // 获取文件的后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            log.info("文件的后缀名为：" + suffixName);//写日志
            // 设置文件存储路径         *************************************************
            String filePath = "./FILE/KING/";
            String path = filePath + fileName;
            File dest = new File(new File(path).getAbsolutePath());// dist为文件，有多级目录的文件
            // 检测是否存在目录
            if (!dest.getParentFile().exists()) {//因此这里使用.getParentFile()，目的就是取文件前面目录的路径
                dest.getParentFile().mkdirs();// 新建文件夹
            }
            file.transferTo(dest);// 文件写入
            return "上传成功";
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败";
    }


}
